WebClient এর মাধ্যমে OAuth 2.0 এবং Token Based Authentication

Java Technologies - স্প্রিং বুট ক্লায়েন্ট (Spring Boot Client) - WebClient কনফিগারেশন এবং Customization
127

Spring Boot WebClient ব্যবহার করে OAuth 2.0 এবং Token Based Authentication ইমপ্লিমেন্ট করা অত্যন্ত গুরুত্বপূর্ণ এবং জনপ্রিয় নিরাপত্তা ব্যবস্থা। এটি ব্যবহারকারীর অনুমোদিত টোকেন (Bearer Token) এর মাধ্যমে API-তে অ্যাক্সেস প্রদান করে। নিচে WebClient এর মাধ্যমে এই ফিচারগুলো ইমপ্লিমেন্ট করার বিস্তারিত দেখানো হয়েছে:


১. Maven Dependency যোগ করুন

OAuth 2.0 এবং WebClient ব্যবহারের জন্য নিম্নলিখিত ডিপেনডেন্সি যোগ করুন:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>

২. OAuth 2.0 Configurations

Spring Security এবং OAuth 2.0 এর মাধ্যমে WebClient কনফিগার করতে application.yml বা application.properties ফাইল আপডেট করতে হবে।

application.yml উদাহরণ:

spring:
  security:
    oauth2:
      client:
        registration:
          my-client:
            client-id: YOUR_CLIENT_ID
            client-secret: YOUR_CLIENT_SECRET
            scope: read
            authorization-grant-type: client_credentials
            token-uri: https://auth-server.com/oauth/token

৩. WebClient Bean Configuration

WebClient কনফিগার করার জন্য একটি @Bean ডিফাইন করতে হবে, যা স্বয়ংক্রিয়ভাবে OAuth 2.0 Token ব্যবহারে সক্ষম হবে।

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.oauth2.client.OAuth2AuthorizedClientManager;
import org.springframework.security.oauth2.client.OAuth2AuthorizedClientProvider;
import org.springframework.security.oauth2.client.OAuth2AuthorizedClientProviderBuilder;
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
import org.springframework.security.oauth2.client.web.DefaultOAuth2AuthorizedClientManager;
import org.springframework.web.reactive.function.client.WebClient;

@Configuration
public class WebClientConfig {

    @Bean
    public WebClient webClient(OAuth2AuthorizedClientManager authorizedClientManager) {
        return WebClient.builder()
                .filter(new ServletOAuth2AuthorizedClientExchangeFilterFunction(authorizedClientManager))
                .build();
    }

    @Bean
    public OAuth2AuthorizedClientManager authorizedClientManager(
            ClientRegistrationRepository clientRegistrationRepository,
            org.springframework.security.oauth2.client.web.OAuth2AuthorizedClientRepository authorizedClientRepository) {

        OAuth2AuthorizedClientProvider authorizedClientProvider =
                OAuth2AuthorizedClientProviderBuilder.builder()
                        .clientCredentials()
                        .build();

        DefaultOAuth2AuthorizedClientManager authorizedClientManager =
                new DefaultOAuth2AuthorizedClientManager(clientRegistrationRepository, authorizedClientRepository);
        authorizedClientManager.setAuthorizedClientProvider(authorizedClientProvider);

        return authorizedClientManager;
    }
}

৪. WebClient ব্যবহার করে API কল করা

WebClient Bean ব্যবহার করে OAuth 2.0 টোকেন সহ API কল করা যেতে পারে।

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.oauth2.client.annotation.RegisteredOAuth2AuthorizedClient;
import org.springframework.security.oauth2.client.web.reactive.function.client.ServletOAuth2AuthorizedClientExchangeFilterFunction;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;

@Service
public class ApiService {

    @Autowired
    private WebClient webClient;

    public String fetchProtectedData() {
        String url = "https://api.example.com/protected-resource";

        return webClient
                .get()
                .uri(url)
                .retrieve()
                .bodyToMono(String.class)
                .block(); // Blocking call for simplicity
    }
}

Token Based Authentication (Bearer Token)

OAuth 2.0 এর বাইরেও সরাসরি Bearer Token দিয়ে API অ্যাক্সেস করা সম্ভব।

Bearer Token এর জন্য WebClient কনফিগারেশন:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.client.WebClient;

@Configuration
public class WebClientConfig {

    @Bean
    public WebClient webClient() {
        return WebClient.builder()
                .defaultHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN")
                .build();
    }
}

Bearer Token ব্যবহার করে API কল করা:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;

@Service
public class ApiService {

    @Autowired
    private WebClient webClient;

    public String fetchProtectedData() {
        String url = "https://api.example.com/protected-resource";

        return webClient
                .get()
                .uri(url)
                .retrieve()
                .bodyToMono(String.class)
                .block();
    }
}

উল্লেখযোগ্য বিষয়:

  1. OAuth 2.0 Workflow:
    • Client Credentials Grant Type: সার্ভার-টু-সার্ভার অ্যাপ্লিকেশনের জন্য আদর্শ।
    • Authorization Code Grant Type: ইন্টারঅ্যাকটিভ ইউজারের জন্য ব্যবহৃত হয়।
  2. Token Expiry Handling: WebClient স্বয়ংক্রিয়ভাবে টোকেন রিফ্রেশ করে না। যদি আপনার টোকেনের মেয়াদ শেষ হয়ে যায়, তাহলে রিফ্রেশ টোকেন ব্যবহারের ব্যবস্থা করতে হবে।
  3. Exception Handling: WebClient-এ .onStatus() ব্যবহার করে HTTP স্ট্যাটাস কোড চেক এবং এক্সসেপশন হ্যান্ডল করা যেতে পারে।

উদাহরণ রেসপন্স:

{
  "data": "This is a protected resource response.",
  "status": "success"
}

এভাবে, Spring Boot WebClient ব্যবহার করে OAuth 2.0 এবং Token Based Authentication ইমপ্লিমেন্ট করতে পারবেন।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...